# v0.2

import os
import time
import fitz # pip install PyMuPDF
import pandas # pip install pandas openpyxl xlrd

from tkinter import filedialog

WORKPATH = os.getcwd()  # 获取软件的当前工作目录
os.system('title Qovi PDF Tools 转换为图片 v0.2')

# 请求选择 PDF文件 以及 Excel表格命名模板
print('请打开 PDF 文件: (.pdf)')
inputFile = filedialog.askopenfilename(title='打开 PDF 文件', filetypes=(('可携带文件格式', '*.pdf'),))
print(inputFile, '\n')
print('请打开命名模板: (目前仅支持 .xls .xlsx)')
inputScript = filedialog.askopenfilename(title='打开命名模板', filetypes=(('Microsoft Excel 工作表', '*.xls *.xlsx'),))
print(inputScript, '\n')
# 请求使用哪一列进行命名
if inputScript: column = input('使用哪一列进行命名? : (默认值为\'證書編號\') ') or '證書編號'

startTime_pdf2img = time.time() # 开始时间
pdfDoc = fitz.open(inputFile) # 操作打开 PDF

# 读取 Excel表格命名模板 的数据
cert_num = []
error = 0
try:
    content = pandas.read_excel(inputScript)
    print(content[column])
    cert_num = content[column]
except FileNotFoundError as fe:
    print(fe)
    error = 1
except KeyError as ke:
    print(ke)
    error = 2
# 如果没有传入命名模板或报错, 则检测 pdf 页数并按数字开始命名
if error>0 :
    for i in range(pdfDoc.page_count):
        cert_num.append(i+1)

# 遍历 PDF 文件中每一页, 开始转换操作
for pg in range(pdfDoc.page_count):
    page = pdfDoc[pg]
    rotate = int(0)
    # 设置缩放系数
    # 此处若是不做设置, 默认图片分辨率较低, dpi=96, 所以需要缩放
    zoom_x = 2.75
    zoom_y = 2.75
    mat = fitz.Matrix(zoom_x, zoom_y).prerotate(rotate)
    pix = page.get_pixmap(matrix=mat, alpha=False)

    # 将工作目录切换到选择的 PDF 文件下
    pagePath = os.path.dirname(inputFile)
    os.chdir(pagePath)
    # 判断存放图片的文件夹是否存在, 若不存在则创建
    if not os.path.exists('certificate'):
        os.makedirs('certificate')
    # 将图片写入指定的文件夹内
    pix._writeIMG('certificate' + '/' + 'temp.png', 1)  
    # 把 png 图片 转换为 jpg 图片
    # print(WORKPATH +r'\bin\ffmpeg.exe -i ' + '.\certificate\\temp.png -q 0 .\certificate\\%s.jpg' % cert_num[pg] )
    print('ffmpeg.exe -i .\certificate\\temp.png -q 0 .\certificate\\%s.jpg' % cert_num[pg] )
    # os.system(WORKPATH +r'\bin\ffmpeg.exe -i '+'.\certificate\\temp.png -q 0 .\certificate\\images_%s.jpg' % pg)
    os.system(WORKPATH +r'\bin\ffmpeg.exe -i '+'.\certificate\\temp.png -q 0 .\certificate\\%s.jpg' % cert_num[pg] +' -loglevel quiet') # -loglevel quiet: ffmpeg 以静默的模式运行

# 删除 temp.png 缓存
os.system('del .\certificate\\temp.png')
endTime_pdf2img = time.time()   # 结束时间
print('PDF To Image 本过程耗时', int((endTime_pdf2img - startTime_pdf2img)), '秒')  # 计算总过程时间
os.system('echo 任务已完成, 按任意键退出 & pause >nul')